home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok29.lha / CreateIcons / SecureDos.imp < prev    next >
Text File  |  1993-08-15  |  2KB  |  99 lines

  1. IMPLEMENTATION SecureDos;
  2.  
  3. IMPORT d: Dos,
  4.        l: Lists;
  5.  
  6. TYPE
  7.   FHListPtr = POINTER TO FHList;
  8.   FHList = RECORD (l.Node) fh: d.FileHandlePtr END;
  9.   LockListPtr = POINTER TO LockList;
  10.   LockList = RECORD (l.Node) lock: d.FileLockPtr END;
  11.  
  12. VAR
  13.   fhlist: FHListPtr;
  14.   locklist: LockListPtr;
  15.  
  16. PROCEDURE Open(name: LONGINT;
  17.                accessMode: LONGINT): d.FileHandlePtr;
  18.  
  19. VAR
  20.   el: FHListPtr;
  21.  
  22. BEGIN
  23.   NEW(el);
  24.   IF el=NIL THEN RETURN NIL END;
  25.   el.fh := d.Open(name,accessMode);
  26.   IF el.fh=NIL THEN DISPOSE(el); RETURN NIL END;
  27.   l.Add(fhlist,el^);
  28.   RETURN el.fh;
  29. END Open;
  30.  
  31.  
  32. PROCEDURE Close(file: d.FileHandlePtr);
  33.  
  34. VAR el: FHListPtr;
  35.  
  36. BEGIN
  37.   el := fhlist;
  38.   LOOP
  39.     IF el.fh=file THEN
  40.       d.Close(file);
  41.       l.Rem(fhlist,el^);
  42.       DISPOSE(el);
  43.       RETURN;
  44.     END;
  45.     IF el.next=NIL THEN EXIT END;
  46.     el := el.next(FHListPtr);
  47.   END;
  48.   HALT(20);  (* File gar nicht offen! *)
  49. END Close;
  50.  
  51.  
  52. PROCEDURE Lock(name: LONGINT;
  53.                accessMode: LONGINT): d.FileLockPtr;
  54.  
  55. VAR el: LockListPtr;
  56.  
  57. BEGIN
  58.   NEW(el);
  59.   IF el=NIL THEN RETURN NIL END;
  60.   el.lock := d.Lock(name,accessMode);
  61.   IF el.lock=NIL THEN DISPOSE(el); RETURN NIL END;
  62.   l.Add(locklist,el^);
  63.   RETURN el.lock;
  64. END Lock;
  65.  
  66.  
  67. PROCEDURE UnLock(lock: d.FileLockPtr);
  68.  
  69. VAR el: LockListPtr;
  70.  
  71. BEGIN
  72.   el := locklist;
  73.   LOOP
  74.     IF el.lock=lock THEN
  75.       d.UnLock(lock);
  76.       l.Rem(locklist,el^);
  77.       DISPOSE(el);
  78.       RETURN;
  79.     END;
  80.     IF el.next=NIL THEN EXIT END;
  81.     el := el.next(LockListPtr);
  82.   END;
  83.   HALT(20);  (* existiert nicht ! *)
  84. END UnLock;
  85.  
  86.  
  87. BEGIN
  88.  
  89.   fhlist := NIL;
  90.   locklist := NIL;
  91.  
  92. CLOSE
  93.  
  94.   WHILE fhlist#NIL DO Close(fhlist.fh) END;
  95.   WHILE locklist#NIL DO UnLock(locklist.lock) END;
  96.  
  97. END SecureDos.
  98.  
  99.